//
//  main.m
//  test
//
//  Created by dllo on 15/10/20.
//  Copyright (c) 2015年 dllo. All rights reserved.
//

#import <Foundation/Foundation.h>

void test1(void)
{
    printf("函数\n");
}

void printHello()
{
    printf("printHello\n");
}

int maxValue(int a, int b)
{

    return a > b ? a : b;

}

int sum(int a, int b)
{

    return a + b;

}

void print(int cont, int (*p)(int a, int b))
{

    for (int i = 0; i < cont; i++) {
        printf("循环\n");
    }
    int ret = p(3, 5);
    printf("%d\n", ret);

}

typedef struct student{

    char name[20];
    char sex;
    int num;
    float score;

} Student;

typedef BOOL (*PFUN)(Student stu1, Student stu2);

BOOL compareNum(Student stu1, Student stu2)
{

    return stu1.num > stu2.num ? 1 : 0;
    
}

BOOL compareScore(Student stu1, Student stu2)
{
    
    return stu1.score > stu2.score ? 1 : 0;
    
}

BOOL compareName(Student stu1, Student stu2)
{
    
    return strcmp(stu1.name, stu2.name) > 0 ? 1 : 0;
    
}

void sortStu(Student *stu, int cont, PFUN p)
{

    for (int i = 0; i < cont - 1; i++) {
        for (int j = 0; j < cont - i - 1; j++) {
            if (p(stu[j], stu[j + 1])) {
                Student temp = stu[j];
                stu[j] = stu[j + 1];
                stu[j + 1] = temp;
            }
        }
    }

}

void printStu(Student *stu, int cont)
{

    for (int i = 0; i < cont; i++) {
        printf("%s %c %d %.2f\n", stu[i].name, stu[i].sex, stu[i].num, stu[i].score);
    }

}

// 全局区和静态区的变量不用初始化,因为我们可以保证它已经清零
// 常量区和全局区(静态区)不在一个地方
// 静态区能保证所开的区域是清零的

int i = 0;

void test(void)
{

    for (int i = 0; i < 6; i++) {
        printf("$");
    }

}








int main(int argc, const char * argv[]) {

//    void (*p)(void) = NULL;
//    p = test;
//    p();
    
//    void (*p)() = printHello;
//    p();
    
//    char str[10] = {0};
//    int (*p)(int a, int b) = NULL;
//    scanf("%s", str);
//    if (0 == strcmp(str, "sum")) {
//        p = sum;
//    }
//    if (0 == strcmp(str, "max")) {
//        p = maxValue;
//    }
//    print(3, p);
    
//    Student stu[3] = {
//        {"xiaNN", 'm', 3, 99.8},
//        {"gaoS", 'm', 8, 88.8},
//        {"wangN", 'n', 5, 100}
//    };
//    
//    sortStu(stu, 3, compareScore);
//    printStu(stu, 3);
    
//    for (i = 0; i < 5; i++) {
//        if (i >= 3) {
//            test();
//        }
//        printf("*");
//    }
//    
//    int a = 0;
//    printf("栈区: %p\n", &a);
//    
//    int *p = malloc(sizeof(int));
//    printf("堆区: %p\n", p);
//    
//    static int b = 0;
//    printf("静态区: %p\n", &b);
//    
//    char *q = "qingChun";
//    printf("常量区:%p\n", q);
//    
//    printf("代码区: %p\n", test);
//    
//    void *ret = malloc(234);
//    
////    有一个malloc就要配对一个free函数
//    
//    int arr[5]
//    int *p = malloc(sizeof(int) * 5);
//    p[1] = 3;
//    *(p + 2) = 4;
    
//    int arr[5];
//    int *pArr[5] = {NULL};
//    for (int i = 0; i < 5; i++) {
//        pArr[i] = malloc(sizeof(int));
//    }
//    *(pArr[1]) = 3;
    
    
    // 我怕一天一天被摧毁
    // 我想只是害怕清醒
    
    

    
    
    
    
    
    
    
    
    
    
    
    
    
    return 0;
}
